package org.dxy.infrastructure.entity.query;

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.time.LocalDateTime;

/**
 * 工位基础视图实体
 * @author dxy
 * @createTime 2025/9/4
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@TableName("workstation_basic_view")
public class WorkstationBasicViewEntity {

    @TableId(type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 工位编码，唯一标识工位
     */
    private String workstationCode;

    /**
     * 工位名称，用于显示和描述
     */
    private String workstationName;

    /**
     * 所属产线ID
     */
    private Long productionLineId;

    /**
     * 所属产线名称
     */
    private String productionLineName;

    /**
     * 所属车间ID
     */
    private Long workshopId;

    /**
     * 所属车间名称
     */
    private String workshopName;

    /**
     * 所属工厂ID
     */
    private Long factoryId;

    /**
     * 所属工厂名称
     */
    private String factoryName;

    /**
     * 工位类型，例如 "MANUAL"（手动）、"AUTOMATIC"（自动）、"SEMI_AUTOMATIC"（半自动）
     */
    private String workstationType;

    /**
     * 工位状态，例如 "IDLE"（空闲）、"RUNNING"（运行中）、"FAULT"（故障）、"MAINTENANCE"（维护中）
     */
    private String status;

    /**
     * 产能（每小时），工位的生产能力
     */
    private Integer capacity;

    /**
     * 工位位置序号，在产线中的位置
     */
    private Integer position;

    /**
     * 工位所在位置，自动生成：工厂名称-车间名称-产线名称-工位名称
     */
    private String location;

    /**
     * 支持的工艺类型（JSON 格式或逗号分隔字符串）
     */
    private String supportedProcessTypes;

    /**
     * 工位描述，记录工位的用途或备注
     */
    private String description;


    /** 创建人 */
    @TableField(fill = FieldFill.INSERT)
    private String createdBy;

    /** 创建时间 */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createdTime;

    /** 修改人 */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updatedBy;

    /** 更新时间 */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedTime;

    /** 逻辑删除标识 0-未删除 1-已删除 */
    @TableLogic
    private Integer deleted;
}
